home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <dirent.h>
- #include <sys/stat.h>
- #include <sys/xglob.h>
-
- #include "WebCM.h"
- #include "WebCache/WebCache.h"
- #include "FuncUrl/FuncUrl.h"
-
- /* ÆnêµÄ₧è╘é╔é╖éΘé╜é▀é╔ë┴ÄZé╖éΘÆl */
- #define TO_LOCALTIME 32400
-
-
- extern unsigned int cache_sum; /* î╗ì▌âLâââbâVâàé╡é─éóéΘâtâ@âCâïÉö */
- extern unsigned int abs_max; /* Cxxxxxxx é╠ì┼æσÆl */
- extern unsigned int abs_min; /* Cxxxxxxx é╠ì┼żÆl */
- extern char cachedir[256]; /* è┬ï½ò╧Éö WEBCACHE */
- extern char cache_changed; /* âLâââbâVâàé╠ôαùeé≡éPë±é┼éαò╧ìXé╡é╜é⌐üH */
-
- /* URL é╞âeâôâ|âëâèâtâ@âCâïû╝é╠æ╬ë₧âeü[âuâï */
- typedef struct _temptable {
- struct _temptable *next;/* ò╨ò√îⁿâèâXâg */
- char hash; /* ânâbâVâàÆl */
- char type; /* Content-Type */
- unsigned int number; /* âeâôâ|âëâèâtâ@âCâïû╝üié╠ÉöÆlòöüj */
- unsigned int length; /* âtâ@âCâïâTâCâY */
- short year; /* 0...32767 */
- char mon; /* 1...12 */
- char day; /* 1...31 */
- char hour; /* 0...23 */
- char min; /* 0...59 */
- char sec; /* 0...59 */
- char access; /* âAâNâZâXâtâëâO */
- char url[0]; /* urlüiGCC é╔ê╦æ╢é╡é╜ò\ïLé┼éáéΘé▒é╞é╔Æìê╙üj */
- } TEMPTABLE;
-
- static char *ext_type_str[]=
- {"HTM", "TXT", "DOC",
- "GIF", "JPG", "PNG", "BMP",
- "ZIP", "LZH", "TGZ",
- "PDF",
- "DAT", "DAT"};
-
- char destdir[256];
-
- unsigned int start_no = -1;
- unsigned int end_no = -1;
- int copy_flag = 0;
- int del_flag = 0;
- int justify_flag = 0;
- int renum_flag = 0;
- int renum = 0;
- extern TEMPTABLE *tt_top;
-
- void usage (void)
- {
- printf ("WebCacheManager WebCM.X ver0.11\n"
- " programmed by Mitsuky < FreeSoftware >\n"
- "WebCache âtâ@âCâï(Cxxxxxxx.xxx)é╔æ╬é╡é─èeÄφæÇì∞é≡ìséóé▄é╖\n"
- "Ägùpû@ : WebCM [option] [âfâBâîâNâgâèû╝]\n"
- "[option]\n"
- "-C[èJÄnâtâ@âCâïö╘ìå][,ÅIù╣âtâ@âCâïö╘ìå]\n"
- " WebCache âtâ@âCâïé≡î│é╠âtâ@âCâïû╝é╔ò£î│é╡é─âRâsü[é╡é▄é╖üB\n"
- "-M[èJÄnâtâ@âCâïö╘ìå][,ÅIù╣âtâ@âCâïö╘ìå]\n"
- " WebCache âtâ@âCâïé≡î│é╠âtâ@âCâïû╝é╔ò£î│é╡é─ê┌ô«é╡é▄é╖üB\n"
- "-D[èJÄnâtâ@âCâïö╘ìå][,ÅIù╣âtâ@âCâïö╘ìå]\n"
- " WebCache âtâ@âCâïé≡ìφÅ£é╡é▄é╖üB"
- "-J[èJÄnâtâ@âCâïö╘ìå][,ÅIù╣âtâ@âCâïö╘ìå]\n"
- " WebCache âtâ@âCâïé╞ WebCache.env é╠É«ìçɽé≡é╞éΦé▄é╖üB\n"
- "âfâBâîâNâgâèû╝ : -C / -M Ä₧é╠âRâsü[ɵâfâBâîâNâgâè\n"
- " û│ÄwÆΦÄ₧é═âJâîâôâgâfâBâîâNâgâè\n"
- " âfâBâîâNâgâèé¬û│éóÅΩìçé═Ä⌐ô«ôIé╔ì∞ɼé╡é▄é╖\n"
- "è┬ï½ò╧Éö WEBCACHE é≡ÄQÅ╞é╡é▄é╖\n");
- }
-
-
- /* ì─ïAôIé╔âfâBâîâNâgâèé≡ì∞ɼé╖éΘ */
- /* *dirname = "C:/BIN/em/complete/" é╠éµéñé╔ÄwÆΦé╖éΘé╞ */
- /* êΩïCé╔éRèKæwé╠âfâBâîâNâgâèé≡ì∞éΦé▄é╖ */
- /* è∙é╔âfâBâîâNâgâè鬿╢ì▌é╡é╜ÅΩìçé═ë╜éαé╡é▄é╣é± */
- int RecursiveMkdir (char *dirname)
- {
- char *p;
- DIR *dirp;
- char temp_str[256], temp_str2[256];
-
- _fullpath (temp_str, dirname, 256);
- _addlastsep (temp_str);
- _toslash (temp_str);
- p = temp_str;
- do {
- while ((*p) && (*p++ != '/'));
- strncpy (temp_str2, temp_str, p - temp_str);
- *(temp_str2 + (p - temp_str)) = '\0';
- if ((dirp = opendir (temp_str2)) != NULL) {
- closedir (dirp);
- } else {
- printf ("mkdir %s\n", temp_str2);
- if (mkdir (temp_str2, S_IEXEC | S_IWRITE | S_IREAD)) {
- printf ("âGâëü[ : %s é¬ì∞ɼé┼é½é▄é╣é±é┼é╡é╜\n");
- return (-1);
- }
- }
- } while (*p);
- return (0);
- }
-
-
-
- int ExecMain (void)
- {
- int cache_num = 0;
- char source_fname[256], dest_fname[256];
- FILE *fp;
- char *content = NULL;
- char scheme[256], hostname[256], path[256], fname[256], query[256], anchor[256];
- int port;
- TEMPTABLE *tt = tt_top, *tt_next;
-
- _addlastsep (destdir);
- if (RecursiveMkdir (destdir) < 0) {
- return (-1);
- }
- do {
- tt_next = tt->next;
- printf ("Åêù¥Æå %d/%d\x1b[0J\n\x0b", cache_num, cache_sum);
- if ((tt->number >= start_no) && (tt->number <= end_no) && (!tt->access)) {
- tt->access = !0;
- UrlSplit (tt->url, scheme, hostname, path, fname, query, anchor, &port);
- sprintf (source_fname, "%sC%07d.%s", cachedir, tt->number, ext_type_str[tt->type]);
- sprintf (dest_fname, "%s%s", destdir, fname);
-
- printf (" %s", source_fname);
- if (copy_flag) {
- if ((fp = fopen (dest_fname, "rb")) != NULL) {
- printf (" -> %s : ô»û╝é╠âtâ@âCâï鬿╢ì▌é╡é▄é╖\n", dest_fname);
- fclose (fp);
- continue;
- }
- if ((fp = fopen (source_fname, "rb")) != NULL) {
- if ((content = malloc (tt->length)) != NULL) {
- fread (content, tt->length, sizeof (char), fp);
- } else {
- printf ("\n âGâëü[ : âüâéâè鬿½éΦé▄é╣é±\n");
- content = NULL;
- continue;
- }
- fclose (fp);
- if ((fp = fopen (dest_fname, "wb")) != NULL) {
- struct tm t;
- struct utimbuf u;
-
- fwrite (content, sizeof (char), tt->length, fp);
- fclose (fp);
- t.tm_year = tt->year - 1900;
- t.tm_mon = tt->mon - 1;
- t.tm_mday = tt->day;
- t.tm_hour = tt->hour;
- t.tm_min = tt->min;
- t.tm_sec = tt->sec;
- u.modtime = u.actime = mktime (&t) + TO_LOCALTIME;
- utime (dest_fname, &u);
- printf (" -> %s", dest_fname);
- if (!del_flag)
- printf (" : âRâsü[é╡é▄é╡é╜\n");
- } else {
- printf ("\n %s : é▒é╠âtâ@âCâïû╝é┼é═Åæé½ì₧é▀é▄é╣é±\n", dest_fname);
- free (content);
- continue;
- }
- } else {
- printf (" é¬âIü[âvâôé┼é½é▄é╣é±\n", source_fname);
- free (content);
- continue;
- }
- }
- if (del_flag) {
- if (!remove (source_fname)) {
- WCDeleteUrl (tt->url);
- if (copy_flag)
- printf (" : ê┌ô«é╡é▄é╡é╜\n");
- else
- printf (" : ìφÅ£é╡é▄é╡é╜\n");
- } else {
- printf (" : ìφÅ£é┼é½é▄é╣é±é┼é╡é╜\n");
- }
- }
- if (justify_flag) {
- if ((fp = fopen (source_fname, "rb")) != NULL) {
- fclose (fp);
- printf (" : æ╢ì▌é╡é▄é╖\n");
- } else {
- WCDeleteUrl (tt->url);
- printf (" : WebCache.env é⌐éτìφÅ£é╡é▄é╡é╜\n");
- }
- }
- #if 0
- if (renum_flag) {
- tt->number += renum;
- sprintf (dest_fname, "%sC%07d.%s", cachedir, tt->number, ext_type_str[tt->type]);
- if (rename (source_fname, dest_fname) == 0) {
- printf (" : âèâiâôâoü[é╡é▄é╡é╜\n");
- } else {
- printf (" : âèâiâôâoü[é┼é½é▄é╣é±é┼é╡é╜\n");
- }
- }
- #endif
- if (content)
- free (content);
- }
- cache_num++;
- } while ((tt = tt_next) != NULL);
-
- return (0);
- }
-
-
-
- void GetNum (char *argv)
- {
- switch ((char) (*(argv + 2))) {
- case '\0': /* -C é╠é▌ */
- start_no = -1;
- end_no = -1;
- break;
- case ',': /* -C,ÅIù╣âtâ@âCâïö╘ìå */
- start_no = -1;
- sscanf (argv + 3, "%d", &end_no);
- break;
- default: /* -CèJÄnâtâ@âCâïö╘ìå,ÅIù╣âtâ@âCâïö╘ìå */
- sscanf (argv + 2, "%d,%d", &start_no, &end_no);
- break;
- }
- }
-
-
- int main (int argc, char *argv[])
- {
- int i;
- int slash_flag = 0;
-
- {
- char *temp;
-
- temp = getenv ("SLASH");
- if ((temp != NULL) && (*temp == '/')) {
- slash_flag = 1;
- }
- }
- strcpy (destdir, ".");
-
- for (i = 1; i < argc; i++) {
- if (('-' == *argv[i]) || ((slash_flag == 0) && ('/' == *argv[i]))) {
- switch (*(argv[i] + 1)) {
-
- case 'c':
- case 'C':
- copy_flag = !0;
- del_flag = 0;
- GetNum (argv[i]);
- break;
- case 'd':
- case 'D':
- copy_flag = 0;
- del_flag = !0;
- GetNum (argv[i]);
- break;
- case 'm':
- case 'M':
- copy_flag = !0;
- del_flag = !0;
- GetNum (argv[i]);
- break;
-
- case 'j':
- case 'J':
- justify_flag = !0;
- GetNum (argv[i]);
- break;
- #if 0
- case 'r':
- case 'R':
- renum_flag = !0;
- renum = atoi (argv[i] + 2);
- break;
- #endif
- default:
- usage ();
- return (-1);
- }
- } else {
- strcpy (destdir, argv[i]);
- }
- }
-
- if ((!copy_flag) && (!del_flag) && (!justify_flag) && (!renum_flag)) {
- usage ();
- return (-1);
- }
- WCInit ();
- if (start_no == -1)
- start_no = abs_min;
- if (end_no == -1)
- end_no = abs_max;
-
- if (!cache_sum) {
- printf ("âLâââbâVâàâtâ@âCâïé¬éáéΦé▄é╣é±\n");
- return (0);
- }
- printf ("C%07d é⌐éτ C%07d é≡Åêù¥é╡é▄é╖\n", start_no, end_no);
- ExecMain ();
- if (renum_flag)
- cache_changed = !0;
- if ((del_flag) || (justify_flag) || (renum_flag))
- WCTini ();
-
- return (0);
- }
-